#####################################################################
# File: Sconstruct.py
#
# 可以在 Sconstruct.py 文件中写
# python注释
# python语句
#
#####################################################################


# 不指定构建的可执行文件的文件名，一般不使用这个。

# Program('main.cpp')

#####################################################################

print('调用 Program(\'Main', 'main.cpp\') 函数。')
print('我想要构建 Main 可执行文件。')

#####################################################################

# 指定构建的可执行文件的文件名。

# Program('Main', 'main.cpp')

#####################################################################

# 编译多个源文件
# 这种写法有一点复杂

# Program('Main', ['main.cpp', 'Animals/Dog.cpp'])

#####################################################################

# 为了更容易处理文件名长列表，SCons提供了一个Split函数，
# 这个Split函数可以将一个用引号引起来，
# 并且以空格或其他空白字符分隔开的字符串分割成一个文件名列表，和编写 CMakeLists.txt 文件类似：
# 这种写法，我觉得挺好的。

# Program('Main', Split('main.cpp Animals/Dog.cpp'))

#####################################################################

# 对上面的写法的改进。

# srcFiles = Split('main.cpp Animals/Dog.cpp')
# Program('Main', srcFiles)

#####################################################################

# SCons允许使用Python关键字参数来标识输出文件和输入文件。输出文件是target，输入文件是source，例如：
# 我现在对 python 不熟，对 scons 也不熟，所以这种写法现在还理解不了。

# srcFiles = Split('main.cpp Animals/Dog.cpp')
# Program(target='Main', source=srcFiles)

#####################################################################

# 如果需要用同一个SConstruct文件编译多个程序，只需要调用Program方法多次，例如：
# 相当于 CMake 中的多个 add_executable()

# srcFiles = Split('main.cpp Animals/Dog.cpp')
# 生成名为 Main 的可执行文件。
# Program(target='Main', source=srcFiles)
# 生成名为 Dog01 的可执行文件。
# Program(target='Dog01', source=srcFiles)

#####################################################################

# 多个程序之间共享源文件是很常见的代码重用方法。

# 一种方式就是利用公共的源文件创建一个库文件，然后其他的程序可以链接这个库文件。

# 另一个更直接，但是不够便利的方式就是在每个程序的源文件列表中包含公共的文件，例如：

common = ['Animals/Dog.cpp']

srcFiles = ['main.cpp'] + common

# bar_files = ['bar1.cpp', 'bar2.cpp'] + common

# Program('bar', bar_files)

Program('Main01', srcFiles)

#####################################################################
